iT邦幫忙

DAY 9
2

emacs的30天學習筆記系列 第 9

emacs 做中學第九天:學然後知不足,用然後知不好用

  • 分享至 

  • xImage
  •  

昨晚用了最初階的GDB指令,n (NEXT 下一步) ,s(STEP 進入函式),p (PRINT 把想要的變數,把執行階段呈現出來)。其中 p的變數值呈現,和現像中差很多。
尤其是接/發訊息內容的兩個buffer(cheetah.c 裏的inbuffer 和 outb),
我們想要看它和RFC 2616 的SPEC比比看,在gdb 模式下,預設的PRINT功能,似乎不盡理想。當然這種眾人的集體創造,這種需求,想也知道,別人在多年前應該也發生過了。

google gdb print format , 發現可以用C語言的方式來秀
http://www.cmlab.csie.ntu.edu.tw/~daniel/linux/gdb.html
提到

printf expression --使用 C 語言的格式化字串 (printf format string) 功能來顯示。e.g. printf "var=%d\n", var

printf 的用法蠻五花八門,原來gdb也可以用,真是摸蛤仔兼洗褲,在
gdb可以練習。

在這裏
http://sourceware.org/gdb/onlinedocs/gdb/Print-Settings.html
提到,
set print pretty on

Cause gdb to print structures in an indented format with one member per line, like this:

$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}

比較漂亮的呈現結構(structure)。
set print array on
set print array-indexes on
也可以把陣列印漂亮一點。

在強大的IDE 整合除錯環境裏,變號呈現大多很親合,很少讓我們特別考慮到這問題,因為昨晚 port 8000 被佔,導致程式沒法在emacs裏GDB, 在shell裏下,突顯了列印執行時期變數值的問題。
在往後的trace中,這些是有用的小方法。

剛好邦友weithenn 分享RHCE的主題,也會分享到,看行程(process)的指令,
看port被佔用的情況的指令,真有書到用時方恨少,花了一些時間排除異常。
昨天在emacs意外發現到,要跳出gdb模式,要用signal 裏的kill,signal在
網路程式或所謂系統程式裏,也用到很多。在獵豹cheetah1.8中,

	if(signal(SIGCHLD, SIG_IGN) == SIG_ERR) {
			crit("Couldn't initialize signal handlers.");
		}

對於網路程式,這些系統管理概念,感覺比學習程式語言還難懂,
有些是用槍時間,或是為何而戰,因何而戰有重要的關係,
API通常和框架設計理念有相關,

這類的開發人員,如果要正確無誤的開發,除了看得懂RFC 的SPEC,實作時,一些學生時代的作業系統架構常識也不能缺少。

晚點再分享關於CGI的實作。


上一篇
emacs 做中學第八天:
下一篇
emacs 做中學第十天:GDB tarace不進去的地方,一個讓人意猶未盡的狀況
系列文
emacs的30天學習筆記38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言